package com.linkgie.galaxyframework.crypto;

import java.io.OutputStream;

public interface SymmetricCryptor {

	/**
	 * 加密数据；
	 * 
	 * @param pubKey     公钥；
	 * @param plainBytes 明文数据；
	 * @return 密文数据；
	 */
	byte[] encrypt(byte[] plainBytes);

	/**
	 * 加密数据；
	 * 
	 * @param pubKey     公钥；
	 * @param plainBytes 明文数据；；
	 * @param offset     明文输入偏移；
	 * @param length     明文输入长度；
	 * @return 密文数据；
	 */
	byte[] encrypt(byte[] plainBytes, int offset, int length);

	/**
	 * 加密数据；
	 * 
	 * @param pubKey     公钥；
	 * @param plainBytes 明文数据；；
	 * @param offset     明文输入偏移；
	 * @param length     明文输入长度；
	 * @param out        密文输出；
	 * @return 密文输出长度；
	 */
	int encrypt(byte[] plainBytes, int offset, int length, OutputStream out);

	/**
	 * 解密数据；
	 * 
	 * @param DK          解密密钥；
	 * @param cipherBytes 密文数据；
	 * @return 明文数据；
	 */
	byte[] decrypt(byte[] cipherBytes);

	/**
	 * 解密数据；
	 * 
	 * @param DK          解密密钥；
	 * @param cipherBytes 密文数据；
	 * @param offset      密文输入偏移；
	 * @param length      密文输入长度；
	 * @return 明文数据；
	 */
	byte[] decrypt(byte[] cipherBytes, int offset, int length);

	/**
	 * 解密数据；
	 * 
	 * @param DK          解密密钥；
	 * @param cipherBytes 密文数据；
	 * @param offset      密文输入偏移；
	 * @param length      密文输入长度；
	 * @param out         明文输出；
	 * @return 输出长度；
	 */
	int decrypt(byte[] cipherBytes, int offset, int length, OutputStream out);
	
}
